package cn.kgc;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author wangyue
 * @version 1.0
 */
public class Demo7 {
    private static ExecutorService executorService= Executors.newFixedThreadPool(10);

    public static void main(String[] args) {
        //任务1
        CompletableFuture<String> future1=CompletableFuture.supplyAsync(()->{
            return Thread.currentThread().getName();
        },executorService);

        //任务2
        CompletableFuture<String> future2=CompletableFuture.supplyAsync(()->{
            return Thread.currentThread().getName();
        },executorService);

       //任务1或者任务2中有一个任务执行完成,执行任务3。在任务3中不能获得前面已经完成的任务的返回值。自己也没有返回值
//        future1.runAfterEitherAsync(future2,()->{
//               System.out.println("任务1和任务2中任意一个执行完毕后执行任务3");
//          },executorService);

        //任务1或者任务2中有一个任务执行完成,执行任务3。在任务3中可以获得前面已经完成的任务的返回值。自己没有返回值
//        future1.acceptEitherAsync(future2,(result)->{
//            System.out.println("任务1和任务2中任意一个执行完毕后执行任务3,并且获得返回值"+result);
//        },executorService);

        //任务1或者任务2中有一个任务执行完成,执行任务3。在任务3中可以获得前面已经完成的任务的返回值。自己有返回值
         future1.applyToEitherAsync(future2,(result)->{
             System.out.println("任务1和任务2中任意一个执行完毕后执行任务3,并且获得返回值"+result);
             return "任务3中的返回值";
         },executorService);

        //关闭线程池
        executorService.shutdown();
    }
}